package com.photonpay.api.request;

import cn.hutool.http.Method;
import com.photonpay.api.response.OpenCardResponse;
import lombok.Builder;
import lombok.Data;

import java.math.BigDecimal;

/**
 * 开卡
 * @author ：lo-
 * @date ：Created in 2023/11/22 14:40
 */
@Data
@Builder
public class OpenCardRequest extends BaseRequest<OpenCardResponse> {

    /**
     * 您需要用于充值的币种钱包余额账户ID号，您可在“钱包”接口中进行查询您的账户ID。
     */
    private String accountId;

    /**
     * 到账金额，您希望充值到账金额是多少，我们将为您计算出需要扣取您所选钱包余额的金额。充值金额和到账金额择一填写即可
     */
    private BigDecimal arrivalAmount;

    /**
     * 您需要填入你想开卡的卡bin信息，目前支持的卡bin信息可在卡bin接口中查询。
     */
    private String cardBin;

    /**
     * "USD" "EUR" "GBP"
     * 卡本币
     */
    private String cardCurrency;

    /**
     * 卡有效期。您可填写此卡的有效期，以月为计数单位。如：您需要虚拟卡的有效期为1年，则输入“12”即可。如不上传，则由系统自动分配虚拟卡有效期。（最小12个月，最大35个月）
     */
    private Integer cardExpirationDate;

    /**
     * "VISA" "MasterCard" "Discover"
     * 卡组织
     */
    private String cardScheme;

    /**
     * 卡类型。share： 共享卡； recharge： 充值卡。
     */
    private String cardType;

    /**
     * 填入用卡人id后，虚拟卡将属于此用卡人。如不填则默认使用默认持卡人信息进行开卡。
     */
    private String cardholderId;

    /**
     * 如果你想在matrix下申请卡，请填写matrix账号。如果不填，就在会员下默认创建。
     */
    private String matrixAccount;

    /**
     * 日交易限额。为空时不做限制，非空时大于1。默认最高限额为20000USD，如有需要请联系业务人员申请
     */
    private BigDecimal maxOnDaily;

    /**
     * 月交易限额。为空时不做限制，非空时大于1。默认最高限额为20000USD，如有需要请联系业务人员申请。
     */
    private BigDecimal maxOnMonthly;

    /**
     * 单笔交易最大金额。为空时不做限制，非空时大于1。默认最高限额为20000USD，如有需要请联系业务人员申请。
     */
    private BigDecimal maxOnPercent;

    /**
     * 充值金额，您想从币种钱包余额往卡里充值的资金。我们将为计算出最后实际到卡内的金额。充值金额和到账金额择一填写即可。
     */
    private BigDecimal rechargeAmount;

    /**
     * 商户请求流水号，每笔交易的唯一请求号，不可重复。
     */
    private String requestId;

    /**
     * 可交易额度。transactionLimitType值为limited时，不能为空。
     */
    private BigDecimal transactionLimit;

    /**
     * "limited" "unlimited"
     * 是否限制可交易额度，默认unlimited
     */
    private String transactionLimitType;

    @Override
    public Class<OpenCardResponse> getResponseClass() {
        return OpenCardResponse.class;
    }

    @Override
    public String getBasePath() {
        return "/vcc/open/v2/openCard";
    }

    @Override
    public Method getMethod() {
        return Method.POST;
    }

    /**
     * 是否需要签名
     *
     * @return true = 需要
     */
    @Override
    public boolean isSign() {
        return true;
    }
}
